﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace DIProject.Util
{
    /// <summary>
    /// Все методы пишут в формате
    /// "тип лога" "дата" "номер документа" "номер партии" "номер товара" "количество" "цена"
    /// тип лога - 
    /// 0 - создать док на фескальнике
    /// 1 - создать док в базе
    /// 2 - записать 1 строку на фескальник
    /// 3 - записать 1 строку в база
    /// 4 - закрыть док на фескальнике
    /// 5 - удалить док на фескальнике
    /// 6 - удалить док в базе
    /// </summary>
    public class DILogInFile
    {
        private static string LogCashFileName
        {
            get
            {
                return DateTime.Now.Date.ToShortDateString() + ".log";
            }
        }
        private static void AddLogString(string logStr)
        {
            try
            {
                string curDir = Directory.GetCurrentDirectory();
                string logDir = curDir + "/LOG";
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }
            string filePath = logDir + "/" + LogCashFileName;
                System.IO.File.AppendAllText(filePath, logStr, System.Text.Encoding.UTF8);
            }
            catch (System.IO.IOException ee)
            {
                System.Windows.Forms.MessageBox.Show("Не удалось записать в лог файл \n" + ee.ToString(), "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
            }
            catch (Exception ee)
            {
                System.Windows.Forms.MessageBox.Show("Не удалось записать в лог файл \n" + ee.ToString(), "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// логируем на диск запись в фескальный регистратор - 0
        /// </summary>
        /// <param name="date"></param>
        /// <param name="partyId"></param>
        /// <param name="goodsId"></param>
        /// <param name="count"></param>
        /// <param name="price"></param>
        public static void LogCashSale(DateTime date,Int32 docId, Int32 partyId, Int32 goodsId, Int32 count, decimal price)
        {
            string template = "0\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}" + Environment.NewLine;
            string lStr = string.Format(template, date, docId, partyId, goodsId, count, price);
            AddLogString(lStr);
        }
        /// <summary>
        /// создание документа чека на фескальнике - 2
        /// </summary>
        /// <param name="date"></param>
        /// <param name="docId"></param>
        public static void LogCashCreateDoc(DateTime date, Int32 docId)
        {
            // Int32 partyId, Int32 goodsId, Int32 count, decimal price
            string template = "2\t{0}\t{1}\t0\t0\t0\t0" + Environment.NewLine;
            string lStr = string.Format(template, date, docId);
            AddLogString(lStr);
        }
        /// <summary>
        /// закрываем чек на фескальнике - 4
        /// </summary>
        /// <param name="date"></param>
        /// <param name="docId"></param>
        public static void LogCachCloseDoc(DateTime date, Int32 docId)
        {
            string template = "4\t{0}\t{1}\t0\t0\t0\t0" + Environment.NewLine;
            string lStr = string.Format(template, date, docId);
            AddLogString(lStr);
        }
        /// <summary>
        /// аннулируем док на фескальнике - 5
        /// </summary>
        /// <param name="date"></param>
        /// <param name="docId"></param>
        public static void LogCashCancelDoc(DateTime date, Int32 docId)
        {
            string template = "5\t{0}\t{1}\t0\t0\t0\t0" + Environment.NewLine;
            string lStr = string.Format(template, date, docId);
            AddLogString(lStr);
        }
        /// <summary>
        /// записываем строку в БД - 3
        /// </summary>
        /// <param name="date"></param>
        /// <param name="docId"></param>
        /// <param name="partyId"></param>
        /// <param name="goodsId"></param>
        /// <param name="count"></param>
        /// <param name="price"></param>
        public static void LogDBSale(DateTime date, Int32 docId, Int32 partyId, Int32 goodsId, Int32 count, decimal price)
        {
            string template = "3\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}" + Environment.NewLine;
            string lStr = string.Format(template, date, docId, partyId, goodsId, count, price);
            AddLogString(lStr);
        }
        /// <summary>
        /// создаем док в БД - 1
        /// </summary>
        /// <param name="date"></param>
        /// <param name="docId"></param>
        public static void LogDBCreateDoc(DateTime date, Int32 docId)
        {
            string template = "1\t{0}\t{1}\t0\t0\t0\t0" + Environment.NewLine;
            string lStr = string.Format(template, date, docId);
            AddLogString(lStr);
        }
        /// <summary>
        /// удаляем док в БД - 6
        /// </summary>
        /// <param name="date"></param>
        /// <param name="docId"></param>
        public static void LogDBCancelDoc(DateTime date, Int32 docId)
        {
            string template = "6\t{0}\t{1}\t0\t0\t0\t0" + Environment.NewLine;
            string lStr = string.Format(template, date, docId);
            AddLogString(lStr);
        }
    }
}
